package com.zyw.orm.dao;


import com.zyw.orm.support.BaseEntity;
import com.zyw.orm.support.page.Page;

import java.io.Serializable;
import java.util.List;

/**
 * @author zhangyw
 */
public interface BaseDao<T extends BaseEntity, PK extends Serializable> {

    /**
     * 获取单条数据
     *
     * @param id pk
     * @return
     */
    T get(PK id);

    /**
     * 查询数据列表
     *
     * @param entity
     * @return
     */
    List<T> findList(T entity);

    <E> Page<E> findPage(Page<E> page);

    <E> Page<E> findPage(String statement, Page<E> page);

    /**
     * 插入数据
     *
     * @param entity
     * @return
     */
    int insert(T entity);

    /**
     * 更新数据
     *
     * @param entity
     * @return
     */
    int update(T entity);

    /**
     * 删除数据（一般为逻辑删除，更新del_flag字段为1）
     *
     * @param id
     * @return
     * @see public int delete(T entity)
     */
    @Deprecated
    int delete(PK id);

    /**
     * 删除数据（一般为逻辑删除，更新del_flag字段为1）
     *
     * @param entity
     * @return
     */
    int delete(T entity);

}